package com.example.other;

import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;

/**
 * @author readpage
 * @create 2022-09-12 21:30
 *
 * @Inherited 表示该注解会被子类继承，注意，仅针对类，成员属性、方法并不受此注释的影响。
 * @Retention: 指定所修饰的 Annotation 的生命周期: SOURCE\CLASS (默认行为) \ RUNTIME
 * 只有声明为RUNTIME声明周期的注解，才能通过反射获取。
 * @Target: 此注解说明注解的作用目标，默认值为任何元素。
 *          ElementType.TYPE：允许被修饰的注解作用在类、接口和枚举上
 *          ElementType.FIELD：允许作用在属性字段上
 *          ElementType.METHOD：允许作用在方法上
 *          ElementType.PARAMETER：允许作用在方法参数上
 *          ElementType.CONSTRUCTOR：允许作用在构造器上
 *          ElementType.LOCAL_VARIABLE：允许作用在本地局部变量上
 *          ElementType.ANNOTATION_TYPE：允许作用在注解上
 *          ElementType.PACKAGE：允许作用在包上
 *
 */
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
public @interface MyAnnotation {
    String value() default "hello.txt";
}
